////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  afmonitorelements.cpp
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include "afmonitorelements.h"
#include "parametersetmanager.h"

AFMONITORELEMENTS_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Default Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixAFMONITORTypeClass::chromatixAFMONITORTypeClass(
    const CHAR* name)
    : ParameterModule(name, MAJOR, MINOR, PATCH, 0, 0, 0, 0)
{
    PARAMETER_INITIALIZE(SymbolTableID);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(parameter_version);
    PARAMETER_INITIALIZE(monitorAlgoConfig);
    PARAMETER_INITIALIZE(valueMonitorBank);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixAFMONITORTypeClass::chromatixAFMONITORTypeClass(
    const CHAR* name,
    UINT32 modeId,
    UINT16 mode,
    UINT16 subMode,
    UINT32 group)
    : ParameterModule(name, MAJOR, MINOR, PATCH, modeId, mode, subMode, group)
{
    PARAMETER_INITIALIZE(SymbolTableID);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(parameter_version);
    PARAMETER_INITIALIZE(monitorAlgoConfig);
    PARAMETER_INITIALIZE(valueMonitorBank);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Destructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixAFMONITORTypeClass::~chromatixAFMONITORTypeClass()
{
    UnloadchromatixAFMONITORType(this);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// GetName
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const CHAR* chromatixAFMONITORTypeClass::GetName(
    const CHAR* type)
{
    const CHAR* name = type;
    CHAR temp[ParameterFileSymbolTableEntry::TYPE_LEN + 1];
    if (PARAMETER_STRCMP(type, ParameterFileSymbolTableEntry::GetType(temp, "chromatixAFMONITOR")) == 0)
    {
        name = "chromatixAFMONITOR";
    }
    return name;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixIirFltrCfgType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixAFMONITORTypeClass::LoadchromatixIirFltrCfgType(
    ParameterFileSymbolTableEntry* entry,
    chromatixIirFltrCfgType* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->enable);
    result = result && entry->ReadInt32(&structure->numOfSamples);
    result = result && entry->ReadFloat(&structure->coeffNumerator);
    result = result && entry->ReadFloat(&structure->coeffDenominator);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixMvavgFltrCfgType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixAFMONITORTypeClass::LoadchromatixMvavgFltrCfgType(
    ParameterFileSymbolTableEntry* entry,
    chromatixMvavgFltrCfgType* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->enable);
    result = result && entry->ReadInt32(&structure->numOfSamples);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixMedianFltrCfgType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixAFMONITORTypeClass::LoadchromatixMedianFltrCfgType(
    ParameterFileSymbolTableEntry* entry,
    chromatixMedianFltrCfgType* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->enable);
    result = result && entry->ReadInt32(&structure->numOfSamples);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixSensProfileType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixAFMONITORTypeClass::LoadchromatixSensProfileType(
    ParameterFileSymbolTableEntry* entry,
    chromatixSensProfileType* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadFloat(&structure->triggerThreshold);
    result = result && entry->ReadInt32(&structure->consecutiveCountThreshold);
    result = result && entry->ReadInt32(&structure->frameToArmed);
    result = result && LoadchromatixMedianFltrCfgType(entry, &structure->medianFltrCfg);
    result = result && LoadchromatixMvavgFltrCfgType(entry, &structure->mvavgFltrCfg);
    result = result && LoadchromatixIirFltrCfgType(entry, &structure->IIRFltrCfg);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAbsoluteModeCfgType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixAFMONITORTypeClass::LoadchromatixAbsoluteModeCfgType(
    ParameterFileSymbolTableEntry* entry,
    chromatixAbsoluteModeCfgType* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->enable);
    result = result && entry->ReadFloat(&structure->baseline);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixValueMonitorType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixAFMONITORTypeClass::LoadchromatixValueMonitorType(
    ParameterFileSymbolTableEntry* entry,
    chromatixValueMonitorType* structure)
{
    BOOL result = TRUE;
    structure->VMSetType = (chromatixVMSetTypeEnum)entry->ReadEnum(&result);
    structure->detectionType = (chromatixDetectorTypeEnum)entry->ReadEnum(&result);
    result = result && LoadchromatixAbsoluteModeCfgType(entry, &structure->absoluteModeCfg);
    result = result && LoadchromatixSensProfileType(entry, &structure->sensProfileLow);
    result = result && LoadchromatixSensProfileType(entry, &structure->sensProfileMed);
    result = result && LoadchromatixSensProfileType(entry, &structure->sensProfileHigh);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixValueMonitorBankType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixAFMONITORTypeClass::LoadchromatixValueMonitorBankType(
    ParameterFileSymbolTableEntry* entry,
    chromatixValueMonitorBankType* structure)
{
    BOOL result = TRUE;

    // Reading structure->valueMonitor from the symbol table
    {
        result = result && entry->ReadUInt32(&structure->valueMonitorCount);
        structure->valueMonitorID = entry->ID;
        ParameterFileSymbolTableEntry* pointerEntry1 = entry->Table->ReadPointerEntry(entry);
        result = result && pointerEntry1 != NULL;
        if (result)
        {
            structure->valueMonitor   = PARAMETER_NEW chromatixValueMonitorType[structure->valueMonitorCount];
        }
        if (!result || structure->valueMonitor == NULL)
        {
            structure->valueMonitorCount = 0;
        }
        for (UINT32 i = 0; result && i < structure->valueMonitorCount; i++)
        {
            result = result && LoadchromatixValueMonitorType(pointerEntry1, &structure->valueMonitor[i]);
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTopoDefaultMixerType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixAFMONITORTypeClass::LoadchromatixTopoDefaultMixerType(
    ParameterFileSymbolTableEntry* entry,
    chromatixTopoDefaultMixerType* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->secondarySceneChangeCntThres);
    result = result && entry->ReadInt32(&structure->secondaryUnstableCntThres);
    result = result && entry->ReadInt32(&structure->gyroEnable);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTopoDCIAFType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixAFMONITORTypeClass::LoadchromatixTopoDCIAFType(
    ParameterFileSymbolTableEntry* entry,
    chromatixTopoDCIAFType* structure)
{
    BOOL result = TRUE;
    structure->profileIndex = (chromatixTopoDCIAFEnum)entry->ReadEnum(&result);
    result = result && entry->ReadInt32(&structure->distance);
    result = result && entry->ReadInt32(&structure->confidence);
    result = result && entry->ReadInt32(&structure->SADR);
    result = result && entry->ReadInt32(&structure->gyro);
    result = result && entry->ReadInt32(&structure->SADPanning);
    result = result && entry->ReadInt32(&structure->gyroPanning);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTopoTOFType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixAFMONITORTypeClass::LoadchromatixTopoTOFType(
    ParameterFileSymbolTableEntry* entry,
    chromatixTopoTOFType* structure)
{
    BOOL result = TRUE;
    structure->profileIndex = (chromatixTopoTOFEnum)entry->ReadEnum(&result);
    result = result && entry->ReadInt32(&structure->distance);
    result = result && entry->ReadInt32(&structure->TOFconfidenceHigh);
    result = result && entry->ReadInt32(&structure->TOFconfidenceMedium);
    result = result && entry->ReadInt32(&structure->SADPanning);
    result = result && entry->ReadInt32(&structure->gyroPanning);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTopoPDAFType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixAFMONITORTypeClass::LoadchromatixTopoPDAFType(
    ParameterFileSymbolTableEntry* entry,
    chromatixTopoPDAFType* structure)
{
    BOOL result = TRUE;
    structure->profileIndex = (chromatixTopoPDAFEnum)entry->ReadEnum(&result);
    result = result && entry->ReadInt32(&structure->defocusLow);
    result = result && entry->ReadInt32(&structure->defocusHigh);
    result = result && entry->ReadInt32(&structure->PDAFconfidence);
    result = result && entry->ReadInt32(&structure->SADPanning);
    result = result && entry->ReadInt32(&structure->gyroPanning);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTopoCAFType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixAFMONITORTypeClass::LoadchromatixTopoCAFType(
    ParameterFileSymbolTableEntry* entry,
    chromatixTopoCAFType* structure)
{
    BOOL result = TRUE;
    structure->profileIndex = (chromatixTopoCAFEnum)entry->ReadEnum(&result);
    result = result && entry->ReadInt32(&structure->SADR);
    result = result && entry->ReadInt32(&structure->gyro);
    result = result && entry->ReadInt32(&structure->gyroPanning);
    result = result && entry->ReadInt32(&structure->SADPanning);
    result = result && entry->ReadInt32(&structure->FV);
    result = result && entry->ReadInt32(&structure->faceTriggerHold);
    result = result && entry->ReadInt32(&structure->CAFSceneChangeHold);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixMonitorAlgoConfigType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixAFMONITORTypeClass::LoadchromatixMonitorAlgoConfigType(
    ParameterFileSymbolTableEntry* entry,
    chromatixMonitorAlgoConfigType* structure)
{
    BOOL result = TRUE;
    result = result && LoadchromatixTopoCAFType(entry, &structure->topoCAF);
    result = result && LoadchromatixTopoPDAFType(entry, &structure->topoPDAF);
    result = result && LoadchromatixTopoTOFType(entry, &structure->topoTOF);
    result = result && LoadchromatixTopoDCIAFType(entry, &structure->topoDCIAF);
    result = result && LoadchromatixTopoDefaultMixerType(entry, &structure->topoDefaultMixer);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixAFMONITORType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixAFMONITORTypeClass::LoadchromatixAFMONITORType(
    ParameterFileSymbolTableEntry* entry,
    chromatixAFMONITORType* structure)
{
    BOOL result = TRUE;
    result = result && Loadmodule_versionStruct(entry, &structure->module_version);
    result = result && Loadparameter_versionStruct(entry, &structure->parameter_version);
    result = result && LoadchromatixMonitorAlgoConfigType(entry, &structure->monitorAlgoConfig);
    result = result && LoadchromatixValueMonitorBankType(entry, &structure->valueMonitorBank);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load module_versionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixAFMONITORTypeClass::Loadmodule_versionStruct(
    ParameterFileSymbolTableEntry* entry,
    chromatixAFMONITORType::module_versionStruct* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->major_revision);
    result = result && entry->ReadInt32(&structure->minor_revision);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load parameter_versionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixAFMONITORTypeClass::Loadparameter_versionStruct(
    ParameterFileSymbolTableEntry* entry,
    chromatixAFMONITORType::parameter_versionStruct* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->major_revision);
    result = result && entry->ReadInt32(&structure->minor_revision);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixValueMonitorBankType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixAFMONITORTypeClass::UnloadchromatixValueMonitorBankType(
    chromatixValueMonitorBankType* structure)
{
    PARAMETER_DELETE[] structure->valueMonitor;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixAFMONITORType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixAFMONITORTypeClass::UnloadchromatixAFMONITORType(
    chromatixAFMONITORType* structure)
{
    UnloadchromatixValueMonitorBankType(&structure->valueMonitorBank);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Parse symbol table entry, and return a new object
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ParameterModule* chromatixAFMONITORTypeClass::Parse(
    ParameterSetManager* manager,
    ParameterFileSymbolTableEntry* entry) const
{
    chromatixAFMONITORTypeClass* cls = NULL;

    if (PARAMETER_STRCMP(Type, entry->Type) == 0 && Major == entry->Major &&
        Minor == entry->Minor && Patch == entry->Patch)
    {
        cls = PARAMETER_NEW chromatixAFMONITORTypeClass(GetName(entry->Type), 
            entry->ModeId, entry->Mode, entry->SubMode, entry->Group);
        if (cls != NULL)
        {
            BOOL result = TRUE;

            cls->SymbolTableID = entry->ID;
            cls->ID            = entry->ID;

            result = result && LoadchromatixAFMONITORType(entry, cls);

            if (!result)
            {
                PARAMETER_DELETE cls;
                cls = NULL;
            }
        }
    }
    return (ParameterModule*)cls;
}


AFMONITORELEMENTS_NAMESPACE_END
